/**
 * @file genre.h
 * @brief Fichier d'entête du module genre.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

#ifndef H_GENRE_H
#define H_GENRE_H

/* *********************************************************************

                       Librairies de genre                           

********************************************************************* */

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include "utilitaireString.h"

/* *********************************************************************

                        Définitions de types                           

********************************************************************* */

/**
 * @struct sGenre
 * @brief Structure utilisée pour la gestion des Genre
 *
 * Cette structure est utilisée pour gérer un Genre. Les champs de cette structure doivent être modifiés ou lus par les accesseurs et mutateurs. Ils doivent être initialisés et libérés avec les fonctions prévus à cette effet
 */
struct sGenre {
	unsigned int id; /** */
	char * libelle; /** */
  char maj;
  char sup;
};
/**
 * @typedef Genre
 * @brief Redéfinit la structure sGenre
 */
	typedef struct sGenre Genre;

/* *********************************************************************

           Fonctions de la structure Genre          

********************************************************************* */

/**
 * @fn Genre * creer_Gen() ;
 * @brief Crée une genre dans le tas
 *
 * @return un pointeur sur Genre
 */
void * creer_Gen();

/**
 * @fn void init_Gen(Genre * genre);
 * @brief Initilise une genre
 *
 * @param[in,out] Genre pointeur sur Genre
 */
void init_Gen(Genre * genre);

/**
 * @fn void liberer_Gen(Genre * genre);
 * @brief Libère la genre
 *
 * @param[in,out] genre pointeur sur Genre
 */
void liberer_Gen(Genre * genre);

/**
 * @fn void detruire_Gen(Genre ** genre);
 * @brief Détruis une genre du tas
 * 
 * @param[in,out] genre pointeur sur Genre
 */
void detruire_Gen(Genre ** genre);

/**
 * @fn void copier_Gen(Genre *dest, const Genre *src);
 * @brief Copie dans dest le Genre src
 *
 * @param[in,out] dest contiendra les mêmes infor que src
 * @param src
 */
void copier_Gen(Genre **dest, const Genre *src);

/* *********************************************************************

           Accesseurs et Mutateurs de la structure Genre               

********************************************************************* */

/**
 * @fn unsigned int getId_Gen(const Genre * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Genre
 * @return unsigned int
 */
unsigned int getId_Gen(const Genre * ptr) ;

/**
 * @fn void setId_Gen(Genre *ptr, const unsigned int val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Genre.
 * @param val.
 */
void setId_Gen(Genre *ptr, const unsigned int val) ;

/**
 * @fn char * getLibelle_Gen(const Genre * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Genre
 * @return char *
 */
char * getLibelle_Gen(const Genre * ptr) ;

/**
 * @fn void setLibelle_Gen(Genre *ptr, const char * val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Genre.
 * @param val.
 */
void setLibelle_Gen(Genre *ptr, const char * val) ;

/**
 * @fn void setMaj_Gen(Genre *ptr, const char b);
 * @brief Set le besoin de faire une mise à jour, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setMaj_Gen(Genre *ptr, const char b);

/**
 * @fn char getMaj_Gen(const Genre *ptr);
 * @brief Retourne 0 si pas besoin de faire la mise à jour, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getMaj_Gen(const Genre *ptr);

/**
 * @fn void setSup_Gen(Genre *ptr, const char b);
 * @brief Set le besoin de le supprimer, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setSup_Gen(Genre *ptr, const char b);

/**
 * @fn char getSup_Gen(const Genre *ptr);
 * @brief Retourne 0 si pas besoin de le supprimer, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getSup_Gen(const Genre *ptr);

#endif
